package org.example.service;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public interface LogService {

    /**
     * propagation设置事务属性：传播行为设置为当前操作需要新事务
     *
     * REQUIRED（默认）	若当前存在事务，则加入；若不存在，则新建事务	最常用场景，如业务主流程操作
     * REQUIRES_NEW	始终新建事务，原事务暂停，新事务独立提交/回滚	需独立事务的场景（如日志记录、审计）
     * NESTED	若当前存在事务，则在嵌套事务中执行（需数据库支持保存点）	子事务需部分回滚的场景（如订单支付与库存扣减）
     * SUPPORTS	若当前存在事务，则加入；若不存在，则以非事务方式执行	可选事务的场景（如只读查询）
     * NOT_SUPPORTED	以非事务方式执行，若当前存在事务，则暂停	明确不需要事务的场景（如批量导入）
     * MANDATORY	必须存在事务，否则抛出异常	强制要求事务的场景（如金融交易）
     * NEVER	必须在非事务状态下执行，否则抛出异常	禁止事务的场景（如敏感操作审计）
     *
     * */
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    void log(Integer out, Integer in, Integer money,String status);
}
